<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="TOKN">﻿</span><span class="COMM">//------------------------------------------------------------------------------</span><span class="WHIT">
<span class='line'>  2</span> </span><span class="COMM">// File: jamUtils.jsxinc</span><span class="WHIT">
<span class='line'>  3</span> </span><span class="COMM">// Version: 3.3</span><span class="WHIT">
<span class='line'>  4</span> </span><span class="COMM">// Release Date: 2012-10-21</span><span class="WHIT">
<span class='line'>  5</span> </span><span class="COMM">// Copyright: © 2011-2012 Michel MARIANI &lt;http://www.tonton-pixel.com/blog/></span><span class="WHIT">
<span class='line'>  6</span> </span><span class="COMM">// Licence: GPL &lt;http://www.gnu.org/licenses/gpl.html></span><span class="WHIT">
<span class='line'>  7</span> </span><span class="COMM">//------------------------------------------------------------------------------</span><span class="WHIT">
<span class='line'>  8</span> </span><span class="COMM">// This program is free software: you can redistribute it and/or modify</span><span class="WHIT">
<span class='line'>  9</span> </span><span class="COMM">// it under the terms of the GNU General Public License as published by</span><span class="WHIT">
<span class='line'> 10</span> </span><span class="COMM">// the Free Software Foundation, either version 3 of the License, or</span><span class="WHIT">
<span class='line'> 11</span> </span><span class="COMM">// (at your option) any later version.</span><span class="WHIT">
<span class='line'> 12</span> </span><span class="COMM">// </span><span class="WHIT">
<span class='line'> 13</span> </span><span class="COMM">// This program is distributed in the hope that it will be useful,</span><span class="WHIT">
<span class='line'> 14</span> </span><span class="COMM">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span><span class="WHIT">
<span class='line'> 15</span> </span><span class="COMM">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><span class="WHIT">
<span class='line'> 16</span> </span><span class="COMM">// GNU General Public License for more details.</span><span class="WHIT">
<span class='line'> 17</span> </span><span class="COMM">// </span><span class="WHIT">
<span class='line'> 18</span> </span><span class="COMM">// You should have received a copy of the GNU General Public License</span><span class="WHIT">
<span class='line'> 19</span> </span><span class="COMM">// along with this program.  If not, see &lt;http://www.gnu.org/licenses/>.</span><span class="WHIT">
<span class='line'> 20</span> </span><span class="COMM">//------------------------------------------------------------------------------</span><span class="WHIT">
<span class='line'> 21</span> </span><span class="COMM">// Version History:</span><span class="WHIT">
<span class='line'> 22</span> </span><span class="COMM">//  3.3:</span><span class="WHIT">
<span class='line'> 23</span> </span><span class="COMM">//  - Added jamUtils.loadActionSet ().</span><span class="WHIT">
<span class='line'> 24</span> </span><span class="COMM">//  - Added extra file.writeln () when needed in jamUtils.writeJsonFile ().</span><span class="WHIT">
<span class='line'> 25</span> </span><span class="COMM">//  - Added proper handling of null values in jamUtils.cloneData () and</span><span class="WHIT">
<span class='line'> 26</span> </span><span class="COMM">//    jamUtils.getCustomOptions ().</span><span class="WHIT">
<span class='line'> 27</span> </span><span class="COMM">//  3.2:</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="COMM">//  - Incremented version number to keep in sync with other modules.</span><span class="WHIT">
<span class='line'> 29</span> </span><span class="COMM">//  3.1:</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="COMM">//  - Moved jamEngine.dataToHexaString () and jamEngine.hexaToDataString ()</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="COMM">//    to jamUtils.dataToHexaString () and jamUtils.hexaToDataString ().</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="COMM">//  3.0:</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="COMM">//  - Applied the redefined JSON AM Reference format.</span><span class="WHIT">
<span class='line'> 34</span> </span><span class="COMM">//  2.0:</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="COMM">//  - Initial release.</span><span class="WHIT">
<span class='line'> 36</span> </span><span class="COMM">//------------------------------------------------------------------------------</span><span class="WHIT">
<span class='line'> 37</span> 
<span class='line'> 38</span> </span><span class="COMM">/**
<span class='line'> 39</span>  * @fileOverview
<span class='line'> 40</span>  * @name jamUtils.jsxinc
<span class='line'> 41</span>  * @author Michel MARIANI
<span class='line'> 42</span>  */</span><span class="WHIT">
<span class='line'> 43</span> 
<span class='line'> 44</span> </span><span class="COMM">//------------------------------------------------------------------------------</span><span class="WHIT">
<span class='line'> 45</span> 
<span class='line'> 46</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.jamUtils</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">    </span><span class="COMM">/**
<span class='line'> 49</span>      * Global object (used to simulate a namespace in JavaScript) containing
<span class='line'> 50</span>      * a set of utility functions for scripts written with the
<span class='line'> 51</span>      * &lt;a href="http://www.tonton-pixel.com/blog/json-action-manager/">JSON Action Manager&lt;/a> engine.
<span class='line'> 52</span>      * @author Michel MARIANI
<span class='line'> 53</span>      * @version 3.3
<span class='line'> 54</span>      * @namespace
<span class='line'> 55</span>      */</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">    </span><span class="NAME">this.jamUtils</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">    </span><span class="COMM">//</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">    </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">    </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'> 61</span>          * @description Convert a distance in pixels to "distanceUnit" units.
<span class='line'> 62</span>          * @param {Number} amount Distance in pixels
<span class='line'> 63</span>          * @param {Number} amountBasePerInch Resolution of document in pixels per inch
<span class='line'> 64</span>          * @returns {Number} Distance in "distanceUnit" units (special pixels units at an absolute 72 dpi)
<span class='line'> 65</span>          * @see jamUtils.fromDistanceUnit
<span class='line'> 66</span>          * @example
<span class='line'> 67</span>          * jamEngine.jsonPlay
<span class='line'> 68</span>          * (
<span class='line'> 69</span>          *     "make",
<span class='line'> 70</span>          *     {
<span class='line'> 71</span>          *         "new":
<span class='line'> 72</span>          *         {
<span class='line'> 73</span>          *             "&lt;object&gt;":
<span class='line'> 74</span>          *             {
<span class='line'> 75</span>          *                 "document":
<span class='line'> 76</span>          *                 {
<span class='line'> 77</span>          *                     "name": { "&lt;string&gt;": "Polaroid 4x5 Inch (Print)" },
<span class='line'> 78</span>          *                     "mode": { "&lt;class&gt;": "RGBColorMode" },
<span class='line'> 79</span>          *                     "width":
<span class='line'> 80</span>          *                     {
<span class='line'> 81</span>          *                         "&lt;unitDouble&gt;":
<span class='line'> 82</span>          *                         {
<span class='line'> 83</span>          *                             "distanceUnit": jamUtils.&lt;strong>toDistanceUnit&lt;/strong> (4 * 300, 300)
<span class='line'> 84</span>          *                         }
<span class='line'> 85</span>          *                     },
<span class='line'> 86</span>          *                     "height":
<span class='line'> 87</span>          *                     {
<span class='line'> 88</span>          *                         "&lt;unitDouble&gt;":
<span class='line'> 89</span>          *                         {
<span class='line'> 90</span>          *                             "distanceUnit": jamUtils.&lt;strong>toDistanceUnit&lt;/strong> (5 * 300, 300)
<span class='line'> 91</span>          *                         }
<span class='line'> 92</span>          *                     },
<span class='line'> 93</span>          *                     "resolution": { "&lt;unitDouble&gt;": { "densityUnit": 300 } },
<span class='line'> 94</span>          *                     "depth": { "&lt;integer&gt;": 16 },
<span class='line'> 95</span>          *                     "fill": { "&lt;enumerated&gt;": { "fill": "white" } },
<span class='line'> 96</span>          *                     "profile": { "&lt;string&gt;": "Adobe RGB (1998)" }
<span class='line'> 97</span>          *                 }
<span class='line'> 98</span>          *             }
<span class='line'> 99</span>          *         }
<span class='line'>100</span>          *     }
<span class='line'>101</span>          * );
<span class='line'>102</span>          */</span><span class="WHIT">
<span class='line'>103</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.toDistanceUnit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">amount</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">amountBasePerInch</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>104</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">amount</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NAME">amountBasePerInch</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NUMB">72.0</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="WHIT">            </span><span class="COMM">// return (amount * 72.0) / amountBasePerInch;</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>110</span>          * @description Convert a distance from "distanceUnit" units to pixels.
<span class='line'>111</span>          * @param {Number} amount Distance in "distanceUnit" units (special pixels units at an absolute 72 dpi)
<span class='line'>112</span>          * @param {Number} amountBasePerInch Resolution of document in pixels per inch
<span class='line'>113</span>          * @returns {Number} Distance in pixels
<span class='line'>114</span>          * @see jamUtils.toDistanceUnit
<span class='line'>115</span>          * @example
<span class='line'>116</span>          * jamEngine.meaningfulIds = true;
<span class='line'>117</span>          * var resultDescObj = jamEngine.jsonGet ([ { "document": { "&lt;enumerated&gt;": { "ordinal": "first" } } } ]);
<span class='line'>118</span>          * var width = resultDescObj["width"]["&lt;unitDouble&gt;"]["distanceUnit"];
<span class='line'>119</span>          * var height = resultDescObj["height"]["&lt;unitDouble&gt;"]["distanceUnit"];
<span class='line'>120</span>          * var resolution = resultDescObj["resolution"]["&lt;unitDouble&gt;"]["densityUnit"];
<span class='line'>121</span>          * var pixelsWidth = jamUtils.&lt;strong>fromDistanceUnit&lt;/strong> (width, resolution);
<span class='line'>122</span>          * var pixelsHeight = jamUtils.&lt;strong>fromDistanceUnit&lt;/strong> (height, resolution);
<span class='line'>123</span>          */</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.fromDistanceUnit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">amount</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">amountBasePerInch</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">amount</span><span class="WHIT"> </span><span class="PUNC">/</span><span class="WHIT"> </span><span class="NUMB">72.0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">*</span><span class="WHIT"> </span><span class="NAME">amountBasePerInch</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span> </span><span class="WHIT">            </span><span class="COMM">// return (amount * amountBasePerInch) / 72.0;</span><span class="WHIT">
<span class='line'>128</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>131</span>          * @description Test if a required font is available.
<span class='line'>132</span>          * @param {String} fontPostScriptName Font PostScript name string
<span class='line'>133</span>          * @returns {Boolean} Font found boolean
<span class='line'>134</span>          * @example
<span class='line'>135</span>          * if (jamUtils.&lt;strong>fontExists&lt;/strong> ("Apple-Chancery"))
<span class='line'>136</span>          * {
<span class='line'>137</span>          *     // Use the fancy Apple Chancery font...
<span class='line'>138</span>          * }
<span class='line'>139</span>          */</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.fontExists</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fontPostScriptName</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>141</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">useDOM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT">            </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">useDOM</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// Much faster !!</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">                </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">app.fonts.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">                    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">app.fonts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">postScriptName</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">fontPostScriptName</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">                    </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>151</span> </span><span class="WHIT">                        </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>152</span> </span><span class="WHIT">                        </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">                    </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>157</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">saveMeaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.meaningfulIds</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">saveParseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.parseFriendly</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>160</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.meaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.parseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">                </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>163</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">resultDescriptorObj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.jsonGet</span><span class="WHIT">
<span class='line'>164</span> </span><span class="WHIT">                </span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT">                    </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT">                        </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"property"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;property>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"fontList"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">                        </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"application"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;enumerated>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"ordinal"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"targetEnum"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">                    </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">                </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fontPostScriptNameArr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">resultDescriptorObj</span><span class="PUNC">[</span><span class="STRN">"fontList"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"fontPostScriptName"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span> </span><span class="WHIT">                </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">fontPostScriptNameArr.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">                    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">fontPostScriptNameArr</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">fontPostScriptName</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">                    </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT">                        </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span> </span><span class="WHIT">                        </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">                    </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">                </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>180</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.meaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">saveMeaningfulIds</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>181</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.parseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">saveParseFriendly</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">found</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>187</span>          * @description Load an action if not currently available.
<span class='line'>188</span>          * @param {String} action Action name string
<span class='line'>189</span>          * @param {String} actionSet Action set name string
<span class='line'>190</span>          * @param {String} actionsFilePath Actions file path string
<span class='line'>191</span>          * @example
<span class='line'>192</span>          * Folder.current = new Folder ("~/JSON Action Manager/tests/resources/");
<span class='line'>193</span>          * jamUtils.&lt;strong>loadAction&lt;/strong> ("Cross Process 2", "Cross Processing", "Cross Processing.atn");
<span class='line'>194</span>          */</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.loadAction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">action</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionSet</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionsFilePath</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">            </span><span class="KEYW">try</span><span class="WHIT">
<span class='line'>198</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>199</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.jsonGet</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"action"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;name>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"actionSet"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;name>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionSet</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">            </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.jsonPlay</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"open"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"target"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;path>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionsFilePath</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>213</span>          * @description Load an action set if not currently available.
<span class='line'>214</span>          * @param {String} actionSet Action set name string
<span class='line'>215</span>          * @param {String} actionsFilePath Actions file path string
<span class='line'>216</span>          * @example
<span class='line'>217</span>          * Folder.current = new Folder ("~/JSON Action Manager/tests/resources/");
<span class='line'>218</span>          * jamUtils.&lt;strong>loadActionSet&lt;/strong> ("Cross Processing", "Cross Processing.atn");
<span class='line'>219</span>          */</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.loadActionSet</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">actionSet</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionsFilePath</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT">            </span><span class="KEYW">try</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.jsonGet</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"actionSet"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;name>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionSet</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">            </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT">                </span><span class="NAME">jamEngine.jsonPlay</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"open"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"target"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;path>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">actionsFilePath</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>238</span>          * @description Load a preset if not currently available.
<span class='line'>239</span>          * @param {String} presetProperty Preset property string:&lt;br />
<span class='line'>240</span>          * &lt;ul>
<span class='line'>241</span>          * &lt;li>"brush"&lt;/li>
<span class='line'>242</span>          * &lt;li>"colors"&lt;/li>
<span class='line'>243</span>          * &lt;li>"gradientClassEvent"&lt;/li>
<span class='line'>244</span>          * &lt;li>"style"&lt;/li>
<span class='line'>245</span>          * &lt;li>"pattern"&lt;/li>
<span class='line'>246</span>          * &lt;li>"shapingCurve"&lt;/li>
<span class='line'>247</span>          * &lt;li>"customShape"&lt;/li>
<span class='line'>248</span>          * &lt;li>"toolPreset"&lt;/li>
<span class='line'>249</span>          * &lt;/ul>
<span class='line'>250</span>          * @param {String} presetName Preset name string
<span class='line'>251</span>          * @param {String} presetFilePath Preset file path string
<span class='line'>252</span>          * @example
<span class='line'>253</span>          * Folder.current = new Folder ("~/JSON Action Manager/tests/resources/");
<span class='line'>254</span>          * jamUtils.&lt;strong>loadPreset&lt;/strong> ("style", "Logo X-Aqua in Blue Glass (Button)", "Logo-X-Aqua.asl");
<span class='line'>255</span>          * jamUtils.&lt;strong>loadPreset&lt;/strong> ("toolPreset", "Brush Tool Soft Round 35 Red", "Brush-35-Red.tpl");
<span class='line'>256</span>          */</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.loadPreset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">presetProperty</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">presetName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">presetFilePath</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>259</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">useDOM</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>260</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">useOpen</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span> </span><span class="WHIT">            </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>262</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">classes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">                </span><span class="COMM">// (property): (class)</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">                </span><span class="STRN">"brush"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"brush"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">                </span><span class="STRN">"colors"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"color"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">                </span><span class="STRN">"gradientClassEvent"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"gradientClassEvent"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">                </span><span class="STRN">"style"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"styleClass"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT">                </span><span class="STRN">"pattern"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"'PttR'"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT">                </span><span class="STRN">"shapingCurve"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"shapingCurve"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">                </span><span class="STRN">"customShape"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"customShape"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">                </span><span class="STRN">"toolPreset"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"toolPreset"</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">presetClass</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">classes</span><span class="PUNC">[</span><span class="NAME">presetProperty</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">            </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">saveMeaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.meaningfulIds</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">saveParseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.parseFriendly</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.meaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.parseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">            </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">resultDescriptorObj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.jsonGet</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">            </span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT">                </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT">                    </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"property"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;property>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"presetManager"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">                    </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"application"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;enumerated>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"ordinal"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"targetEnum"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">                </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">            </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">presetManagerArr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">resultDescriptorObj</span><span class="PUNC">[</span><span class="STRN">"presetManager"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">            </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">presetManagerArr.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">presets</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">presetManagerArr</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">                </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">presets</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">presetClass</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">                    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">presetsArr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">presets</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"name"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">                    </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">presetsArr.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">                    </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">                        </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">presetsArr</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">presetName</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">                        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">                            </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">                            </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">                        </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">                    </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">                    </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">                </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">useDOM</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT">                    </span><span class="NAME">app.load</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">presetFilePath</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">                </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">useOpen</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">                    </span><span class="NAME">jamEngine.jsonPlay</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"open"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="STRN">"target"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;path>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">presetFilePath</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">                </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>319</span> </span><span class="WHIT">                    </span><span class="NAME">jamEngine.jsonPlay</span><span class="WHIT">
<span class='line'>320</span> </span><span class="WHIT">                    </span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">                        </span><span class="STRN">"set"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">                        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">                            </span><span class="STRN">"target"</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">                            </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">                                </span><span class="STRN">"&lt;reference>"</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">                                </span><span class="PUNC">[</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">                                    </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"property"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;property>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">presetProperty</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">                                    </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"application"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;enumerated>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"ordinal"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"targetEnum"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">                                </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">                            </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">                            </span><span class="STRN">"to"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;path>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">presetFilePath</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">                            </span><span class="STRN">"append"</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;boolean>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">                        </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">                    </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">            </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.meaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">saveMeaningfulIds</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.parseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">saveParseFriendly</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>343</span>          * @description Convert a JSON text file into a JavaScript data structure.
<span class='line'>344</span>          * @param {String|Object} jsonFile JSON text file path string (or File object)
<span class='line'>345</span>          * @returns {Object|Array|String|Number|Boolean|Null} JavaScript data structure (usually an object or array)
<span class='line'>346</span>          * @see jamUtils.writeJsonFile
<span class='line'>347</span>          * @example
<span class='line'>348</span>          * var data = jamUtils.&lt;strong>readJsonFile&lt;/strong> ("~/Desktop/test-data.json");
<span class='line'>349</span>          * alert ("color: " + jamJSON.stringify (data["color"]));   // -> color: [ "RGBColor", [ 255, 0, 255 ] ]
<span class='line'>350</span>          */</span><span class="WHIT">
<span class='line'>351</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.readJsonFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jsonFile</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>352</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">jsonFile</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">                </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jsonFile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>358</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jsonFile</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">                </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jsonFile</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>363</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>364</span> </span><span class="WHIT">                </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">'\n[jamUtils.readJsonFile] Invalid argument'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>366</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file.open</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"r"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>367</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamJSON.parse</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file.read</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">                </span><span class="NAME">file.close</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>375</span>          * @description Convert a JavaScript data structure into a JSON text file.
<span class='line'>376</span>          * @param {String|Object} jsonFile JSON text file path string (or File object)
<span class='line'>377</span>          * @param {Object|Array|String|Number|Boolean|Null} data JavaScript data structure (usually an object or array)
<span class='line'>378</span>          * @param {String|Number} [space] Indent space string (e.g. "\t") or number of spaces
<span class='line'>379</span>          * @see jamUtils.readJsonFile
<span class='line'>380</span>          * @example
<span class='line'>381</span>          * var magenta = [ "RGBColor", [ 255, 0, 255 ] ];
<span class='line'>382</span>          * var data =
<span class='line'>383</span>          * {
<span class='line'>384</span>          *     "width": 640,
<span class='line'>385</span>          *     "height": 480,
<span class='line'>386</span>          *     "color": magenta,
<span class='line'>387</span>          *     "title": "紅紫色" + "／" + "マゼンタ"
<span class='line'>388</span>          * };
<span class='line'>389</span>          * jamUtils.&lt;strong>writeJsonFile&lt;/strong> ("~/Desktop/test-data.json", data);
<span class='line'>390</span>          */</span><span class="WHIT">
<span class='line'>391</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.writeJsonFile</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jsonFile</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">space</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>393</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">file</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>394</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">jsonFile</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">                </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">File</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jsonFile</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>398</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jsonFile</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">File</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>399</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">                </span><span class="NAME">file</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jsonFile</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>401</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>402</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">                </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">'\n[jamUtils.readJsonFile] Invalid argument'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>406</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">file.open</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">'w'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>408</span> </span><span class="WHIT">                </span><span class="NAME">file.encoding</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'UTF-8'</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>409</span> </span><span class="WHIT">                </span><span class="NAME">file.lineFeed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'unix'</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">                </span><span class="NAME">file.write</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">'\uFEFF'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">  </span><span class="COMM">// Byte Order Mark</span><span class="WHIT">
<span class='line'>411</span> </span><span class="WHIT">                </span><span class="NAME">file.write</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jamJSON.stringify</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">space</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>412</span> </span><span class="WHIT">                </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">space</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">                    </span><span class="NAME">file.writeln</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">                </span><span class="NAME">file.close</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>421</span>          * @description Get a clone (deep copy) of a Javascript data structure.
<span class='line'>422</span>          * @param {Object|Array|String|Number|Boolean|Null} data Javascript data structure
<span class='line'>423</span>          * @returns {Object|Array|String|Number|Boolean|Null} Clone (deep copy) of a Javascript data structure
<span class='line'>424</span>          * @example
<span class='line'>425</span>          * var customOptions;
<span class='line'>426</span>          * var defaultOptions =
<span class='line'>427</span>          * {
<span class='line'>428</span>          *     dialog:
<span class='line'>429</span>          *     {
<span class='line'>430</span>          *         x: 0,
<span class='line'>431</span>          *         y: 0,
<span class='line'>432</span>          *         width: 1024,
<span class='line'>433</span>          *         height: 768
<span class='line'>434</span>          *     }
<span class='line'>435</span>          * };
<span class='line'>436</span>          * //
<span class='line'>437</span>          * customOptions = jamUtils.&lt;strong>cloneData&lt;/strong> (defaultOptions);
<span class='line'>438</span>          * customOptions.dialog.width = 512;
<span class='line'>439</span>          * alert (defaultOptions.dialog.width);   // -&gt; 1024
<span class='line'>440</span>          * //
<span class='line'>441</span>          * customOptions = defaultOptions;
<span class='line'>442</span>          * customOptions.dialog.width = 512;
<span class='line'>443</span>          * alert (defaultOptions.dialog.width);   // -&gt; 512
<span class='line'>444</span>          * 
<span class='line'>445</span>          */</span><span class="WHIT">
<span class='line'>446</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.cloneData</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT">   </span><span class="COMM">// No constructor for null</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">                </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.constructor</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Object</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>454</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>455</span> </span><span class="WHIT">                </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">                </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">                    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.hasOwnProperty</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">                    </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>460</span> </span><span class="WHIT">                        </span><span class="NAME">clone</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.cloneData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>461</span> </span><span class="WHIT">                    </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data.constructor</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>465</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>466</span> </span><span class="WHIT">                </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">                </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">data.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>468</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>469</span> </span><span class="WHIT">                    </span><span class="NAME">clone.push</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.cloneData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">data</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">                </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>479</span> </span><span class="WHIT">        </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">jsonCustomOptionsStringKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"jsonCustomOptions"</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>480</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>481</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>482</span>          * @description Retrieve custom options associated with a unique signature [available in CS3 or later].
<span class='line'>483</span>          * @param {String} signature Unique signature string
<span class='line'>484</span>          * @param {Object} defaultOptions Default options as a JavaScript literal object
<span class='line'>485</span>          * @returns {Object} Custom options as a JavaScript literal object
<span class='line'>486</span>          * @see jamUtils.eraseCustomOptions
<span class='line'>487</span>          * @see jamUtils.putCustomOptions
<span class='line'>488</span>          * @example
<span class='line'>489</span>          * var signature = "unique-signature-custom-options";
<span class='line'>490</span>          * jamUtils.eraseCustomOptions (signature);
<span class='line'>491</span>          * var customOptions = { name: "Rectangle" };
<span class='line'>492</span>          * jamUtils.putCustomOptions (signature, customOptions, true);
<span class='line'>493</span>          * var defaultOptions = { width: 1024, height: 768, name: "Untitled" };
<span class='line'>494</span>          * customOptions = jamUtils.&lt;strong>getCustomOptions&lt;/strong> (signature, defaultOptions);
<span class='line'>495</span>          * if (customOptions.name !== "Untitled")
<span class='line'>496</span>          * {
<span class='line'>497</span>          *     alert (jamJSON.stringify (customOptions.name + "-" + customOptions.width + "x" + customOptions.height));
<span class='line'>498</span>          *     // -> "Rectangle-1024x768"
<span class='line'>499</span>          * }
<span class='line'>500</span>          */</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.getCustomOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">that</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">            </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">mergeOptions</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaults</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>505</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>506</span> </span><span class="WHIT">                </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">defaults</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>508</span> </span><span class="WHIT">                    </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">defaults.hasOwnProperty</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>509</span> </span><span class="WHIT">                    </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>510</span> </span><span class="WHIT">                        </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>511</span> </span><span class="WHIT">                        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>512</span> </span><span class="WHIT">                            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">defaults</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">defaults</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">constructor</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">Object</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>513</span> </span><span class="WHIT">                            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>514</span> </span><span class="WHIT">                                </span><span class="NAME">options</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">mergeOptions</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaults</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">                            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">                        </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">                        </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>518</span> </span><span class="WHIT">                        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>519</span> </span><span class="WHIT">                            </span><span class="NAME">options</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">that.cloneData</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">defaults</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>520</span> </span><span class="WHIT">                        </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">                    </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">                </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">options</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">saveMeaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.meaningfulIds</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">saveParseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.parseFriendly</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>527</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.meaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>528</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.parseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> </span><span class="WHIT">            </span><span class="KEYW">try</span><span class="WHIT">
<span class='line'>530</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>531</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">resultObj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamEngine.classIdAndActionDescriptorToJson</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">jamEngine.uniIdStrToId</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">app.getCustomOptions</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">customOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">jamJSON.parse</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">resultObj</span><span class="PUNC">[</span><span class="STRN">"&lt;descriptor>"</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="NAME">jsonCustomOptionsStringKey</span><span class="PUNC">]</span><span class="PUNC">[</span><span class="STRN">"&lt;string>"</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>533</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>534</span> </span><span class="WHIT">            </span><span class="KEYW">catch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>535</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">customOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.meaningfulIds</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">saveMeaningfulIds</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>539</span> </span><span class="WHIT">            </span><span class="NAME">jamEngine.parseFriendly</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">saveParseFriendly</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>540</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">mergeOptions</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">customOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultOptions</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>541</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>542</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>543</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>544</span>          * @description Save custom options associated with a unique signature [available in CS3 or later].
<span class='line'>545</span>          * @param {String} signature Unique signature string
<span class='line'>546</span>          * @param {Object} customOptions Custom options as a JavaScript literal object
<span class='line'>547</span>          * @param {Boolean} [persistent] Whether the options should persist once the script has finished
<span class='line'>548</span>          * @see jamUtils.eraseCustomOptions
<span class='line'>549</span>          * @see jamUtils.getCustomOptions
<span class='line'>550</span>          * @example
<span class='line'>551</span>          * var signature = "unique-signature-custom-options";
<span class='line'>552</span>          * var customOptions = { width: 512, height: 512, name: "Square" };
<span class='line'>553</span>          * jamUtils.&lt;strong>putCustomOptions&lt;/strong> (signature, customOptions, true);
<span class='line'>554</span>          */</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.putCustomOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">customOptions</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">persistent</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>556</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">descriptorObj</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">            </span><span class="NAME">descriptorObj</span><span class="PUNC">[</span><span class="NAME">jsonCustomOptionsStringKey</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"&lt;string>"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">jamJSON.stringify</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">customOptions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">            </span><span class="NAME">app.putCustomOptions</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">jamEngine.jsonToActionDescriptor</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">descriptorObj</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">persistent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>563</span>          * @description Erase custom options associated with a unique signature [available in CS3 or later].
<span class='line'>564</span>          * @param {String} signature Unique signature string
<span class='line'>565</span>          * @see jamUtils.getCustomOptions
<span class='line'>566</span>          * @see jamUtils.putCustomOptions
<span class='line'>567</span>          * @example
<span class='line'>568</span>          * var signature = "unique-signature-custom-options";
<span class='line'>569</span>          * jamUtils.&lt;strong>eraseCustomOptions&lt;/strong> (signature);
<span class='line'>570</span>          */</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.eraseCustomOptions</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>572</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>573</span> </span><span class="WHIT">            </span><span class="NAME">app.eraseCustomOptions</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">signature</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>577</span>          * @description Convert a raw byte data string into a hexadecimal string.
<span class='line'>578</span>          * @param {String} dataString Raw byte data string
<span class='line'>579</span>          * @returns {String} Hexadecimal string
<span class='line'>580</span>          * @see jamUtils.hexaToDataString
<span class='line'>581</span>          * @example
<span class='line'>582</span>          * var hexaString = jamUtils.&lt;strong>dataToHexaString&lt;/strong> ("«Íï"); // -> "ABCDEF"
<span class='line'>583</span>          */</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.dataToHexaString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dataString</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>586</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hexaDigits</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT"> </span><span class="STRN">"0"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"2"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"4"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"5"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"6"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"7"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"8"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"9"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"A"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"B"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"C"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"D"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"E"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"F"</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>587</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hexaString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dataString.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">            </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">                </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dataByte</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dataString.charCodeAt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">index</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>592</span> </span><span class="WHIT">                </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">dataByte</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">0x00</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dataByte</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">0xFF</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>593</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>594</span> </span><span class="WHIT">                    </span><span class="NAME">hexaString</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hexaDigits</span><span class="PUNC">[</span><span class="PUNC">(</span><span class="NAME">dataByte</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0xF0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>></span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">hexaDigits</span><span class="PUNC">[</span><span class="NAME">dataByte</span><span class="WHIT"> </span><span class="PUNC">&</span><span class="WHIT"> </span><span class="NUMB">0x0F</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>595</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>596</span> </span><span class="WHIT">                </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">                    </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"\n[jamUtils.dataToHexaString] Invalid data string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>599</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>600</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">hexaString</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>602</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>603</span> </span><span class="WHIT">        </span><span class="COMM">//</span><span class="WHIT">
<span class='line'>604</span> </span><span class="WHIT">        </span><span class="COMM">/**
<span class='line'>605</span>          * @description Convert a hexadecimal string into a raw byte data string.
<span class='line'>606</span>          * @param {String} hexaString Hexadecimal string
<span class='line'>607</span>          * @returns {String} Raw byte data string
<span class='line'>608</span>          * @see jamUtils.dataToHexaString
<span class='line'>609</span>          * @example
<span class='line'>610</span>          * var dataString = jamUtils.&lt;strong>hexaToDataString&lt;/strong> ("00011E1F20217E7F80819E9FA0A1FEFF");
<span class='line'>611</span>          * // -> "\u0000\u0001\u001E\u001F !~\u007F\u0080\u0081\u009E\u009F ¡þÿ"
<span class='line'>612</span>          */</span><span class="WHIT">
<span class='line'>613</span> </span><span class="WHIT">        </span><span class="NAME">jamUtils.hexaToDataString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hexaString</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>614</span> </span><span class="WHIT">        </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>615</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dataString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>616</span> </span><span class="WHIT">            </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hexaString.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">            </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">%</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="REGX">/^[0-9A-Fa-f]*$/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">hexaString</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>618</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>619</span> </span><span class="WHIT">                </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>620</span> </span><span class="WHIT">                </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>621</span> </span><span class="WHIT">                    </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">byteString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">hexaString.slice</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">index</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>622</span> </span><span class="WHIT">                    </span><span class="NAME">dataString</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">String.fromCharCode</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">parseInt</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">byteString</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">16</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>623</span> </span><span class="WHIT">                </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>624</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>625</span> </span><span class="WHIT">            </span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>626</span> </span><span class="WHIT">            </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>627</span> </span><span class="WHIT">                </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="STRN">"\n[jamUtils.hexaToDataString] Invalid hexa string"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">            </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">            </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">dataString</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>630</span> </span><span class="WHIT">        </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>631</span> </span><span class="WHIT">    </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>632</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>633</span> 
<span class='line'>634</span> </span><span class="COMM">//------------------------------------------------------------------------------</span><span class="WHIT">
<span class='line'>635</span> 
<span class='line'>636</span> </span></pre></body></html>